package com.cl.utility.annocation;

import java.lang.annotation.*;

/**
 * 包含该注解的方法 不需要校验token  直接放行
 * @author 陌路
 * @date 2022-03-19
 * @apiNote token统一处理
 */
@Documented//标记注解
@Target(ElementType.METHOD) //指定作用在方法上 对方法拦截
@Retention(RetentionPolicy.RUNTIME) //作用域 在运行时有效
public @interface NoAuthorization {

    /** ---------@定义注解---------
     *  元注解
     *    @Target({METHOD,TYPE}) 表示这个注解可以用用在类/接口上，还可以用在方法上
     *    @Retention(RetentionPolicy.RUNTIME) 表示这是一个运行时注解，即运行起来之后，
     *	  才获取注解中的相关信息，而不像基本注解如@Override 那种。
     *    @Inherited 表示这个注解可以被子类继承
     *    @Documented 表示当执行javadoc的时候，本注解会生成相关文档(标记)
     *
     *  自定义注解的使用:
     *  该注解定义好之后,将该注解加在方法上@NoAuthorization即可,
     *  若注解中存在属性需要赋值,则直接可以在注解中赋值即可,
     *	eg:public @interface ZjObj{
     *		String name();
     *		Integer sex();
     *	}
     *  eg: @ZjObj(属性="值") -> @ZjObj(name="张三",sex=1)
     *
     *  也可这样定义注解，效果都是一样的
     *  @Target(value = { ElementType.ANNOTATION_TYPE })
     *  @Retention(RetentionPolicy.RUNTIME)
     *  @Inherited
     *  @Documented
     *
     * ---------@解析注解@使用注解---------
     *  * 若注解中有属性,则可以直接通过反射来获取属性值
     *  * 相关配置信息本来是以属性的方式存放的，现在改为了以注解的方式
     *  *
     *  * @解析注解: 通过反射，获取这个类上的注解对象
     *  * ZjObj zjObj = class.foraName(ZjObj.class);
     *  * 拿到注解对象之后，通过方法，获取各个注解元素的值：
     *  * String name = zjObj.name();
     *  * Integer sex = zjObj.sex ();
     */
}
